static int backtrace_xy(void **BUFFER, int SIZE)
{
    volatile int n = 0;
    volatile int *p;
    volatile int *q;
    volatile int ebp1;
    volatile int eip1;
    volatile int i = 0;
    p = &n;
    ebp1 = p[4];
    eip1 = p[6];
    fprintf(stderr, "======================= backtrace_xy addr: 0x%0x, param1: 0x%0x, param2: 0x%0x\n",
             backtrace_xy, &BUFFER, &SIZE);
    fprintf(stderr, "n addr is 0x%0x\n", &n);
    fprintf(stderr, "p addr is 0x%0x\n", &p);
    for (i = 0; i < SIZE; i++)
    {
        fprintf(stderr, "ebp1 is 0x%0x, eip1 is 0x%0x\n", ebp1, eip1);
        BUFFER[i] = (void *)eip1;
        p = (int*)ebp1;
        q = p - 5;
        eip1 = q[5];
        ebp1 = q[2];
        if (ebp1 == 0 || eip1 == 0)
            break;
    }
    fprintf(stderr, "total level: %d\n", i);
    return i;
}
